package com.mixsmart.spellsql.utils;

import com.mixsmart.spellsql.IExpression;
import com.mixsmart.spellsql.IGroup;
import com.mixsmart.spellsql.IOrder;
import com.mixsmart.spellsql.group.GroupLeaf;
import com.mixsmart.spellsql.order.AscOrder;
import com.mixsmart.spellsql.order.DescOrder;
import com.mixsmart.spellsql.where.exp.EqExpression;
import com.mixsmart.spellsql.where.exp.GeExpression;
import com.mixsmart.spellsql.where.exp.GtExpression;
import com.mixsmart.spellsql.where.exp.InExpression;
import com.mixsmart.spellsql.where.exp.IsNotNullExpression;
import com.mixsmart.spellsql.where.exp.IsNullExpression;
import com.mixsmart.spellsql.where.exp.LeExpression;
import com.mixsmart.spellsql.where.exp.LeftLikeExpression;
import com.mixsmart.spellsql.where.exp.LikeExpression;
import com.mixsmart.spellsql.where.exp.LtExpression;
import com.mixsmart.spellsql.where.exp.NotInExpression;
import com.mixsmart.spellsql.where.exp.RightLikeExpression;

/**
 * 表达式
 * @author lmq
 * @version 1.0
 * @since 1.0
 * 2015年10月22日
 */
public class Exp {
	
	/**
	 * 排序--升序
	 * @param fieldName 字段名称
	 * @return 返回排序对象
	 */
	public static IOrder asc(String fieldName) {
		return new AscOrder(fieldName);
	}
	
	/**
	 * 排序--降序
	 * @param fieldName 字段名称
	 * @return 返回排序对象
	 */
	public static IOrder desc(String fieldName) {
		return new DescOrder(fieldName);
	}
	
	/**
	 * 分组
	 * @param fieldName 字段名称
	 * @return 返回分组对象
	 */
	public static IGroup group(String fieldName) {
		return new GroupLeaf(fieldName);
	}

	/**
	 * 等于
	 * @param fieldName　字段名称
	 * @param value　值
	 * @return　返回表达式对象
	 */
	public static IExpression eq(String fieldName,Object value) {
		return new EqExpression(fieldName, value);
	} 
	
	/**
	 * 包含（in）
	 * @param fieldName　字段名称
	 * @param value　值
	 * @return　返回表达式对象
	 */
	public static IExpression in(String fieldName,Object value) {
		return new InExpression(fieldName, value);
	} 
	
	/**
	 * 不包含（not in）
	 * @param fieldName　字段名称
	 * @param value　值
	 * @return　返回表达式对象
	 */
	public static IExpression notIn(String fieldName,Object value) {
		return new NotInExpression(fieldName, value);
	}
	
	/**
	 * 大于
	 * @param fieldName　字段名称
	 * @param value　值
	 * @return　返回表达式对象
	 */
	public static IExpression gt(String fieldName,Object value) {
		return new GtExpression(fieldName, value);
	}
	
	/**
	 * 大于等于
	 * @param fieldName　字段名称
	 * @param value　值
	 * @return　返回表达式对象
	 */
	public static IExpression ge(String fieldName,Object value) {
		return new GeExpression(fieldName, value);
	}
	
	/**
	 * 小于
	 * @param fieldName　字段名称
	 * @param value　值
	 * @return　返回表达式对象
	 */
	public static IExpression lt(String fieldName,Object value) {
		return new LtExpression(fieldName, value);
	}
	
	/**
	 * 小于等于
	 * @param fieldName　字段名称
	 * @param value　值
	 * @return　返回表达式对象
	 */
	public static IExpression le(String fieldName,Object value) {
		return new LeExpression(fieldName, value);
	}
	
	/**
	 * like (如：like "%流量%")
	 * @param fieldName 字段名称
	 * @param value 值
	 * @return 返回表达式对象
	 */
	public static IExpression like(String fieldName,Object value) {
		return new LikeExpression(fieldName, value);
	}
	
	/**
	 * left like (如：like "%流量")
	 * @param fieldName 字段名称
	 * @param value 值
	 * @return 返回表达式对象
	 */
	public static IExpression leftLike(String fieldName,Object value) {
		return new LeftLikeExpression(fieldName, value);
	}
	
	/**
	 * right like (如：like "流量%")
	 * @param fieldName 字段名称
	 * @param value 值
	 * @return 返回表达式对象
	 */
	public static IExpression rightLike(String fieldName,Object value) {
		return new RightLikeExpression(fieldName, value);
	}
	
	/**
	 * 为空 (如：is null)
	 * @param fieldName 字段名称
	 * @return 返回表达式对象
	 */
	public static IExpression isNull(String fieldName) {
		return new IsNullExpression(fieldName);
	}
	
	/**
	 * 不为空 (如：is not null)
	 * @param fieldName 字段名称
	 * @return 返回表达式对象
	 */
	public static IExpression isNotNull(String fieldName) {
		return new IsNotNullExpression(fieldName);
	}
}
